一開始我們需要得到img的url
可以利用前面的範例將旅遊景點使用CSV匯出檔案
取得一開始的url,以下範例程式碼就不多解釋,不清楚的地方可以看連結那篇。
import requests
from bs4 import BeautifulSoup
import csv
response = requests.get("https://www.taiwan.net.tw/")
soup = BeautifulSoup(response.text, "html.parser")
viewpoints = soup.find_all("a", class_="megamenu-btn")
li_counter = []
PATCH_COLUMNS_IMG = [
"url"
]
for viewpoint in viewpoints:
url = viewpoint.get("href")
url_response = requests.get("https://www.taiwan.net.tw/"+url)
url_soup = BeautifulSoup(url_response.text, "html.parser")
de_viewpoints=url_soup.find_all("a",class_="circularbtn")
for de_viewpoint in de_viewpoints:
print(de_viewpoint.find("img",class_="lazyload").get("data-src"))
_counter = {}
_counter["url"] = de_viewpoint.find("img",class_="lazyload").get("data-src")
li_counter.append(_counter)
with open('viewpoint_img_url.csv', 'w', encoding='utf-8-sig', newline='') as f:
writer = csv.DictWriter(f, fieldnames=PATCH_COLUMNS_IMG)
writer.writeheader()
writer.writerows(li_counter)
將url的資料匯出成csv後,第二步驟需要讀取後存成圖檔。
那這邊使用for迴圈,存到img資料夾底下。使用count將每次的檔名錯開。
import requests
import pandas as pd
df = pd.read_csv("viewpoint_img_url.csv", keep_default_na=False)
count=0
for key, val in df.iterrows():
with open('img/pic'+str(count)+'.jpg', 'wb') as handle:
response = requests.get(val["url"], stream=True)
if not response.ok:
print(response)
for block in response.iter_content(1024):
if not block:
break
handle.write(block)
count+=1
第三步驟將img資料夾裡面的圖片檔轉成灰白,首先我們先需要安裝Pillow套件
pip install Pillow
接下來讀取每一張圖片,轉存呈灰白。這邊imgs.conbert使用L,這模式為灰色影像,每個畫素用8個bit表示,0表示黑色,255表示白色,越接近0就越黑,反之越亮。
from PIL import Image
for i in range(21):
imgs = Image.open('img/pic'+str(i)+'.jpg')
image = imgs.convert('L')
image.save('img/grayscale/pic_b_'+str(i)+'.jpg')
那這樣就完成了。